#!/bin/bash

#
# Nombre:      postonio.sh
# Autor:       Mariano Gonzalez Elias <mgonzel@gmail.com>
# Fecha:       06/05/2011
# Descripcion: Programa daemon de revision de archivos para procesar.
#	       Recibe los archivos, verifica su correcto nombre y secuencia y 
#		ejecuta la postulacion llamando a postini.h
#

#
# Modo de uso:
# ---- -- ---
# Comando:
# ./postonio.sh
#
# Precondicion:
# Deben estar seteadas las variables ARRIDIR y grupo
#


cicleSleepTime=5
postularSleepTime=5

RECIDIR=$grupo/recibidos
RECHAZDIR=$grupo/rechazados

fileAgenciaSeq=$grupo/conf/agencia.seq

##  Verificador de que no exista un proceso en curso al momento de salir
function cleanup {
	waitForPostulaRecibidos
	exit 0
}

## Consulta proceso activo de postular
function waitForPostulaRecibidos {
	while [ "$POSTULAR_EN_EJECUCION" = "SI"  ]; do 
		sleep $postularSleepTime
	done;
}

## validacion de archivo recibido
function validarArchivo {
	archivo=$1
  
	#Chequeo que el formato del archivo es correcto
	if [ -n `echo $archivo | grep "^[a-zA-Z]\{6\}\.[0-9]\{6\}$"` ]; then    

		agencia=${archivo%.*}
		secuencia=${archivo##*.}
		lastsecuencia=`cat $fileAgenciaSeq | grep "^$agencia=" | cut -d= -f 2`

		existeSeq="true"
		if [ -z $lastsecuencia ] 
		then
			lastsecuencia=000000
			existeSeq="false"
		fi

		#Comparo que la secuencia del archivo sea mayor que la ultima secuencia
		# Si es true entonces guardo el valor de nueva secuencia y retorno OK

		archEsValido=$(( $lastsecuencia < $secuencia  ))


		# si es secuencia valida entonces guardo nuevo valor
		if [ $archEsValido = 1 ]
		then
			#TODO: HACER GRABACION DE NUEVA CLAVE
			if [ $existeSeq = "true" ]; then
				echo "busco clave y cambio"
				sed -i s/^$agencia=.*/$agencia=$secuencia/ $fileAgenciaSeq
			else
				echo "$agencia=$secuencia" >> $fileAgenciaSeq
			fi

			#Mensaje archivo valido
			msgProc="$archivo: Archivo de agencia valido: secuencia correcta. Ultima secuencia: $lastsecuencia, secuencia ingresada: $secuencia"
		else
			#Mensaje de secuencia invalida
			msgProc="$archivo: Archivo de agencia invalido: secuencia erronea. Ultima secuencia: $lastsecuencia, secuencia ingresada: $secuencia"
		fi
		echo $msgProc
		. gralog.sh "POSTONIO" "$msgProc" "I"

		#0 = true para el return, se niega entonces archEsValido
		return $(( !($archEsValido) ))

	fi

	#TODO: LOG DE NOMBRE DE ARCHIVO NO VALIDO
	msgProc="$archivo: Nombre de archivo de agencia invalido"
	echo "$msgProc"
	. gralog.sh "POSTONIO" "$msgProc" "I"

	return 1 
}



#setear traps para terminar el demonio
trap cleanup INT TERM

#bucle infinito
while true; do
	for archivo in $(ls $ARRIDIR); do
    
		if validarArchivo $archivo
		then
			. mover.sh "$ARRIDIR/$archivo" "$RECIDIR/$archivo" "POSTONIO"
		else
			. mover.sh "$ARRIDIR/$archivo" "$RECHAZDIR/$archivo" "POSTONIO"
		fi

	done
  
	for recibidos in $(ls $RECIDIR); do
		waitForPostulaRecibidos
		. gralog.sh "POSTONIO" "Ejecutando postular.sh" "I";
		. postular.sh 
	done

	sleep $cicleSleepTime

done

